package algoWing42.modelo;

public class AvionGuia extends AvionEnemigo {

	/**
	 * 
	 */
	private static final long serialVersionUID = -2749064010294917464L;

	private int direccion;

	public static final int RADIO_AVIONGUIA = 30;
	public static final int VALOR_PUNTOS_AVIONGUIA = 100;
	public static final int ENERGIA_AVIONGUIA = 100;
	public static final int VELOCIDAD_AVIONGUIA_VERTICAL = 5;
	public static final int VELOCIDAD_AVIONGUIA_HORIZONTAL = 1;
	public static final double PROB_DISPARAR_AVIONGUIA = 0.02;

	public AvionGuia(int x, int y) {
		super(x, y, RADIO_AVIONGUIA);
		inicializarAvionGuia();
	}

	public AvionGuia(Punto posicion) {
		super(posicion.getX(), posicion.getY(), RADIO_AVIONGUIA);
		inicializarAvionGuia();
	}

	private void inicializarAvionGuia() {
		this.valorEnPuntos = VALOR_PUNTOS_AVIONGUIA;
		this.energia = ENERGIA_AVIONGUIA;
		this.direccion = 1;

	}

	protected void mover() {
		if (this.getX() <= 0) {
			direccion = VELOCIDAD_AVIONGUIA_VERTICAL;
		} else if (this.getX() >= Juego.ANCHO) {
			direccion = (-1) * VELOCIDAD_AVIONGUIA_VERTICAL;
		}

		if (this.getY() >= Juego.LARGO) {
			this.setY(5);
		} else {
			this.moverEnDireccion(direccion, VELOCIDAD_AVIONGUIA_HORIZONTAL);
		}

	}

	private void dispararCohete() {
		Cohete disparoTemp = new Cohete(this.getArea().getPosicion(), false);
		Juego.singleton().agregarDisparoEnemigo(disparoTemp);
	}

	private void dispararTorpedoRastreador() {
		TorpedoRastreador disparoTemp = new TorpedoRastreador(this.getArea()
				.getPosicion());
		Juego.singleton().agregarDisparoEnemigo(disparoTemp);
	}

	private void dispararTorpedo() {
		Torpedo disparoTemp = new Torpedo(this.getArea().getPosicion(), false);
		Juego.singleton().agregarDisparoEnemigo(disparoTemp);
	}

	/***
	 * Se mueve y con 2/5 de probabilidad dispara un arma. Si cae en el 2/5 ->
	 * tiene 1/3 de prob. de disparar cada arma.
	 */
	@Override
	public void vivir() {
		double numeroRandom = Math.random();
		this.mover();

		if (numeroRandom < PROB_DISPARAR_AVIONGUIA) {
			numeroRandom = Math.random();

			if (numeroRandom < 0.22) {
				this.dispararTorpedo();
			}

			if ((numeroRandom > 0.33) & (numeroRandom < 0.66)) {
				this.dispararCohete();
			}

			if (numeroRandom > 0.66) {
				this.dispararTorpedoRastreador();
			}
		}
	}

	public int getDireccion() {
		return direccion;
	}
	
	protected void destruir() {
		 	super.destruir();
	        Juego.singleton().matarNaves();
	    }

}
